<?php


namespace app\web\controller;


use app\api\controller\v2\Auth;
use app\common\cachemodel\Goods;
use app\common\cachemodel\ZhunleActivity;
use app\common\cachemodel\zl1_relation\Zl1RelationAnalysisFitYou;
use app\common\cachemodel\zl1_relation\Zl1RelationAnalysisReport;
use app\common\cachemodel\zl1_relation\Zl1SuitableLoverText;
use app\common\cachemodel\zl1_relation\ZlPlayboyReportText;
use app\common\cachemodel\zl1_relation\ZlWoohimReportText;
use app\common\lib\astrolog\AuthenticatePlayboy;
use app\common\lib\astrolog\HowToWooHim;
use app\common\lib\exception\ApiException;
use app\common\lib\Util;
use app\common\model\Recode;
use think\Controller;
use think\Env;
use think\Exception;
use think\Log;

class RelationResearchFitYou extends Controller
{
    /**
     * log日志前缀
     * @var string
     */
    private static $LOG_PRE = '最适合你的Ta(RelationResearchFitYou Controller-index)-';
    private static $LOG_FLLOW_PRE = '怎么追求Ta(RelationResearchFitYou Controller-follow)-';
    private static $LOG_CHECK_PLAYER_PRE = '鉴渣神器(RelationResearchFitYou Controller-check_player)-';

    /**
     * 导语文字
     * @var string
     */
    private static $TEXT_INTRO = '在感情中，你渴望与伴侣之间的相处关系是平等的。你会尊重对方的想法与抉择，也渴望自 己的想法能够得到伴侣的认可与支持。在与他的相处过程中，你能体谅对方，也能够很快融 入到对方的交际圈中。同时你也是一个对伴侣有很强保护欲的人，不愿意看到自己的伴侣受 委屈，在他面对困境时，你也愿意挺身而出，成为他最坚实的后盾。在爱情中你爽朗直接， 不爱拐弯抹角，可以勇敢表达自己的爱意。';

    /**
     * 解锁文案列表（用于：tab栏 和 目录 文案）
     * @var string[]
     */
    private static $TEXT_TAB_LIST = [
        '终极契合型',
        '甜蜜幸福型',
        '虐恋型',
    ];

    /**
     * 所有子目录文案（用于：未解锁的tab内容页  和 目录菜单）
     * @var string[][]
     */
    private static $TEXT_CATALOG_LIST = [
        [
            '你的终极契合型是什么样的人',
            '你的终极契合型在感情中的样子',
            'TA和你的契合点',
            '终极契合型的事业类型',
            '终极契合型对事业的态度',
            '终极契合型的财富来源',
            '终极契合型的家庭观念'
        ],
        [
            '你的甜蜜幸福型是什么样的人',
            '你的甜蜜幸福型在感情中的样子',
            '你们的身体契合度',
        ],
        [
            '你的虐恋型是个什么样的人',
            '虐恋的呈现方式',
            '为什么会相爱相杀',
        ]
    ];

    /**
     * 环境变量，dev、beta、online
     * @var string
     */
    protected $env = '';

    /**
     * 静态资源地址
     * @var string
     */
    protected $oss = '';

    /**
     * 最适合你的Ta，商品类型id
     * @var array
     */
    private $gids = [];


    /**
     * 是否打开【怎么追求Ta-报告】词条开关（打开的话，会在词条签名，展示词条的code码）
     * @var int
     */
    private $is_open_follow_report_words_log = 0;
    /**
     * 是否打开【鉴渣神器-报告】词条开关（打开的话，会在词条签名，展示词条的code码）
     * @var int
     */
    private $is_open_check_player_report_words_log = 0;


    public function _initialize(): void
    {
        $this->env = Env::get('host.name');
        $this->oss = Env::get('host.photo');

        $relation_research_conf = config('relation_research');
        $this->is_open_follow_report_words_log = $relation_research_conf['is_open_follow_report_words_log'];
        $this->is_open_check_player_report_words_log = $relation_research_conf['is_open_check_player_report_words_log'];

        $this->gids = [
            84,//最适合你的Ta-终极契合型
            85,//最适合你的Ta-甜蜜幸福型
            86,//最适合你的Ta-虐恋型
            87,//最适合你的Ta-打包解锁
            89,//怎么追求TA
            90,//鉴渣神器
        ];
    }

    /**
     * 适合你的Ta
     * @throws ApiException|\Exception
     */
    public function index()
    {
        // 上线必须修改成false，关闭测试模式，测试模式为实时计算，页面无权限验证
        $isTest = false;
        $isCoinPay = Util::IsIos() && Util::CheckAppVersion('2.9.7') === '大' ? true : false;
        //请求参数
        $height = input('h/d', 0);//导航栏高度
        $rid = input('rid/d', 0);//用户的档案id
        $tabGid = input('tab_gid/d', 0);//默认跳转哪个tab（用于订单详情页面，点击跳转，比如：用户只解锁了“虐脸型”，那么这里就是2）
        $orderId = input('order_id/s', '');//可以为空，从订单进去的话传此参数，服务端检查此参数，如果存在那么都不展示档案修改
        $refer_name = input('refer_name/d', '');//打点参考：https://srn8xwm09u.feishu.cn/sheets/shtcnv2QZe9osa4CfqJT02GlNTg  [220]
        //终端类型（android/ios）
        $appType = $this->request->header('app-type');

        //是否展示js日志
        $is_show_log = 1;
        if ($this->env === 'online')
        {
            $is_show_log = 0;
        }

        //解锁需要传的link数据列表
        $links = [
            'pay_order?type=23&rid=' . $rid . '&gid=' . $this->gids[0] . '&need_auth=1',//"终极契合型"下单页
            'pay_order?type=23&rid=' . $rid . '&gid=' . $this->gids[1] . '&need_auth=1',//"甜蜜幸福型"下单页
            'pay_order?type=23&rid=' . $rid . '&gid=' . $this->gids[2] . '&need_auth=1',//"虐恋型"下单页
            'pay_order?type=23&rid=' . $rid . '&gid=' . $this->gids[3] . '&need_auth=1',//“最适合你的Ta打包解锁”下单页
            'change_single_recode?current_rid=' . $rid . '&need_auth=2',//适合你的Ta，右上角切换档案
        ];

        //正常、异常 页面通用数据
        $common_data = [
            'appType' => $appType,//app类型【android/ios】
            'height' => $height,//导航栏高度
            'is_show_nav' => 1,//是否展示导航栏
            'nav_right_click_link' => $links[4],//导航栏右侧切换档案的link参数
            'is_show_log' => $is_show_log,//是否展示js日志
        ];

        //自定义变量
        $err_msg = '';//异常信息，为空不提示

        $seifRid = 0;//自己的档案id
        $recodeDetail = [];
        $data_tabs = [];
        $data_catalog_list = [];

        //校验token
        try
        {
            if (!$isTest)
            {//正式上线后
                $auth = new Auth();
                $auth->checkRequestAuth();
                $userInfo = $auth->user;
                $seifRid = (int)$userInfo['rid'];
                $uid = $userInfo ? (int)$userInfo['id'] : 0;

                if ($rid !== 0)
                {//检查这个档案是否是该用户的，如果不是会抛异常
                    $recodeDetail = (new Recode())->getRecode(['uid' => $uid, 'id' => $rid]);
                }
            } else
            {//测试情况
                //测试档案不是自己的
//                $recodeDetail = (new Recode())->getRecode(['uid' => 2, 'id' => $rid]);//测试异常情况，这个档案不是这个用户的会抛异常

                //测试（下面是beta的uid和rid）
                $uid = 12345883;//mark173
//                $rid = 4923176;//mark173，自己的档案（终极契合型【已解锁-档案改变了】，甜蜜幸福型【已解锁-档案未改变】，虐恋型【未解锁】）
                $rid = 4923265;//mark173，档案名：傻逼（全部未解锁）
//                $rid = 4922163;//mark173，档案名：AAaa（终极契合型【已解锁-档案改变了】，甜蜜幸福型【未解锁】，虐恋型【未解锁】）
//                $rid = 4923005;//mark173，档案名：ErrTyt（解锁了全部，档案没有改变）
//                $rid = 4922859;//mark173，档案：我就是我（解锁了全部，档案改变了）

                //测试（下面是线上的uid和rid）
//                $uid = 10834769;
////                $rid = 11500887;//mark173，阿黑 的档案（全部解锁，档案没有改变）
////                $rid = 1762008;//mark173，国外-测试11 的档案（只解锁了虐恋型，档案没有改变）
//                $rid = 2969087;//mark173，达沃 的档案（啥都没解锁）

                $recodeDetail = (new Recode())->getRecode(['uid' => $uid, 'id' => $rid]);
            }
        }
        catch (Exception $e)
        {
            Log::write(self::$LOG_PRE . '权限认证失败：line=' . $e->getLine() . ',msg=' . $e->getMessage() . '[ ' . $e->getFile() . '：' . $e->getLine() . ' ]', 'error', true);
            $err_msg = '请求异常,请稍后重试！';
            return $this->fetchErr('index', $common_data, $err_msg);
        }


        //传递的页面数据
        $tab_index = 0;
        if ($tabGid)
        {
            $tabGidConfig = [
                84 => 0,
                85 => 1,
                86 => 2,
            ];
            $tab_index = $tabGidConfig[$tabGid] ?? 0;
        }

        try
        {
            //todo 查询用户解锁信息
            // $reportData = [  解锁信息数据结构
            //         85 => [  // 解锁的 商品ID  // 84=》契合型  85 =》甜美恋爱型  86 =>虐恋型
            //         'id' => 2,
            //         'gid' => 85,
            //         'order_num' => '99912345',
            //         'content' => [   // 结果词条ID
            //             0 => '12000809',
            //             1 => '12010809',
            //             2 => '12020203',
            //             3 => '12030611',
            //         ],
            //         'status' => 2,
            //         'recode_info' => '{"id":"4923257","name":"\\u521a\\u56de\\u5bb6","type":"2","year":"1995","month":"1","day":"1","hour":"0","minute":"0","timezone":"8","birth_country":"\\u5317\\u4eac\\u5e02","birth_province":"\\u5317\\u4eac\\u5e02","birth_city":"\\u4e1c\\u57ce\\u533a","live_country":"\\u5317\\u4eac\\u5e02","live_province":"\\u5317\\u4eac\\u5e02","live_city":"\\u4e1c\\u57ce\\u533a","comments":"\\u81ea\\u5df1","isself":"1","long_deg":"116","long_min":"25","ew":"1","lat_deg":"39","lat_min":"55","ns":"1","avatar":"","is_summer":"0","uid":"12346625","sun":"\\u6469\\u7faf","moon":"\\u5c04\\u624b","asc":"\\u5929\\u79e4"}',  备份档案信息
            //         'name' => '刚回家',
            //         'recode_is_change' => true,  // 档案是否变更
            //     ],
            //             86 => [
            //         'id' => 3,
            //         'gid' => 86,
            //         'order_num' => '99912345',
            //         'content' => [
            //             0 => '13000809',
            //             1 => '13010809',
            //             2 => '13021112',
            //             3 => '13030003090000',
            //             4 => '13030003090001',
            //             5 => '1303010809',
            //         ],
            //         'status' => 2,
            //         'recode_info' => '{"id":"4923257","name":"\\u521a\\u56de\\u5bb6","type":"2","year":"1995","month":"1","day":"1","hour":"0","minute":"0","timezone":"8","birth_country":"\\u5317\\u4eac\\u5e02","birth_province":"\\u5317\\u4eac\\u5e02","birth_city":"\\u4e1c\\u57ce\\u533a","live_country":"\\u5317\\u4eac\\u5e02","live_province":"\\u5317\\u4eac\\u5e02","live_city":"\\u4e1c\\u57ce\\u533a","comments":"\\u81ea\\u5df1","isself":"1","long_deg":"116","long_min":"25","ew":"1","lat_deg":"39","lat_min":"55","ns":"1","avatar":"","is_summer":"0","uid":"12346625","sun":"\\u6469\\u7faf","moon":"\\u5c04\\u624b","asc":"\\u5929\\u79e4"}',
            //         'name' => '刚回家',
            //         'recode_is_change' => true,
            //     ],
            // ]
            if ($orderId)
            {   // 查看历史
                $reportData = (new Zl1RelationAnalysisFitYou())->getOrderFitYouReport($uid, $rid, $orderId);
            } else
            {
                $reportData = (new Zl1RelationAnalysisFitYou())->getFitYouReport($recodeDetail);
            }

            //是否解锁数据
            $unlock_list = [
                isset($reportData[84]),//终极契合型
                isset($reportData[85]),//甜蜜幸福型
                isset($reportData[86]),//虐恋型
                isset($reportData[84], $reportData[85], $reportData[86]),//最适合你的Ta打包解锁
            ];
            //已解锁的档案数据

            //查询用户当前档案信息
            $recode = $this->getRecodeInfo($recodeDetail, $seifRid);

            //查询活动数据
            $goodData = (new Goods())->GoodsTypeInfo(23);//查询所有商品
            $goodData = array_column($goodData, null, 'id');
            (new ZhunleActivity())->goodsActiveInfo(23, $goodData);//获取活动数据

            //tab栏里的数据
            for ($i = 0; $i < 3; $i++)
            {
                $recode_info = [];//修改档案以后，之前的档案信息
                $is_current_unlock = ($unlock_list[$i] || $unlock_list[3]);//当前是否已解锁

                //转换为：0：未解锁；1：未解锁（有活动）；2：正在计算中；3：已解锁；
                $status = 0;//默认设置为：【0：未解锁】
                if (isset($goodData[$this->gids[$i]]['active']))
                {//存在活动，那么设置为【1：未解锁（有活动）】
                    $status = 1;
                }
                if ($is_current_unlock)
                {
                    $recode_current = json_decode($reportData[$this->gids[$i]]['recode_info'], true);
                    $recode_info = (new Util)->getFortuneDetailRecodeInfo([$recode_current], $seifRid)[0];
                    $this->customAvatar($recode_info);

                    //已解锁
                    //$reportData[$this->gids[$i]]['status'] 计算状态 1待计算 2计算成功 3计算失败
                    if (2 !== (int)$reportData[$this->gids[$i]]['status'])
                    {//如果不是计算成功，那么设置为计算中【2：正在计算中】
                        $status = 2;
                    } else
                    {//计算成功【3：已解锁；】
                        $status = 3;
                    }
                }

                $unlock_data_recode_is_expand = $is_current_unlock && $reportData[$this->gids[$i]]['recode_is_change'] ? 1 : 0;
                //组装数组
                $data_tabs[] = [
                    'name' => self::$TEXT_TAB_LIST[$i],//tab的标题
                    'status' => $status,//0：未解锁；1：未解锁（有活动）；2：正在计算中；3：已解锁；
                    'not_unlock_data' => [//未解锁数据
                        'price_now' => $isCoinPay ? floor($this->getPriceNowOrActive($goodData, $i) * 10) : $this->getPriceNowOrActive($goodData, $i),//现价（status=0或1时有效）
                        'price_orignal' => $isCoinPay ? floor($goodData[$this->gids[$i]]['or_prize'] * 10) : $goodData[$this->gids[$i]]['or_prize'],//原价（status=0或1时有效，为空时说明没有活动）
                        'catalog_list' => self::$TEXT_CATALOG_LIST[$i],//目录（status=0或1或2，时有效）
                        'link' => $links[$i],//跳转到下单页的link
                    ],
                    'unlock_data' => [//已解锁数据（status=3）
                        'recode' => [//购买时的档案信息
                            'is_show' => 1,//是否展示【0：不展示；1：展示】
                            'is_expand' => $unlock_data_recode_is_expand,//是否展开（当is_show=1时有效）
                            'info' => $recode_info,//修改档案以后，之前的档案信息
                        ],
                        'list' => []//词条结果列表，例如：
//                        [
//                                'img_title' => 'res_0/0.png',
//                                'text_list' => [
//                '你的终极契合型，是一个责任心强，并且传统务实的人。Ta 很有才华，兴趣爱好广泛，为 人温和、谦虚、甚至有些腼腆，也特别愿意为你付出。',//词条1
//                '在生活中会替你处理很多琐碎的事情， 比如交水电费，买菜做饭等等，只要是 Ta 经手的事情，都会让你感觉到特别安心。在你们 相处的过程中，Ta 能够及时捕捉到你的情绪，照顾你的心情，让你感受到家人般的温暖。'//词条2
//                                               ]
//                         ]
                    ],
                ];

                //目录数据 （注意：未解锁的不显示）
                $data_catalog_list[] = [
                    'title' => self::$TEXT_TAB_LIST[$i],//主目录标题（例如：“终极契合型”）
                    'list' => $is_current_unlock ? self::$TEXT_CATALOG_LIST[$i] : [],//子目录文字列表（注意：没有解锁的时候，设置为空列表）
                ];
            }

            //底部打包解锁全部的数据
            $is_show_data_unlock_all = !$unlock_list[0] && !$unlock_list[1] && !$unlock_list[2] && !$unlock_list[3];
            $price = $goodData[$this->gids[3]]['now_prize'];//打包解锁全部，价格
            $price_orginal = $price;
            $time = 0;//打包解锁全部，活动时间
            if ($is_show_data_unlock_all && isset($goodData[$this->gids[3]]['active']))
            {//存在活动，那么返回活动价格
                $price = $goodData[$this->gids[3]]['active']['price'];
                $time = $goodData[$this->gids[3]]['active']['count_down'];
            }

            $data_unlock_all = [
                'is_show' => $is_show_data_unlock_all ? 1 : 0,//0：不显示；1：显示；（注意：解锁了一个以上，那么底部打包解锁隐藏）
                'time' => $time,//活动倒计时时间，小于等于0不显示，活动标示
                'price' => $isCoinPay ? floor($price * 10) : $price,//打包解锁现价
                'price_orginal' => $isCoinPay ? floor($price_orginal * 10) : $price,//打包解锁原价格
                'link' => $links[3],//全局跳转地址
            ];

            // 当前测试实时计算结果   ##########################测试数据开始###########################
            // 结果需要替换为从数据库和缓存中获取
//            $logicResult = SuitableLover::getInstance()->setUserRecord($recodeDetail)->setLogicType([11, 12, 13])->init();
//            $dataForResult = [];
//            foreach ($logicResult as $k1 => $v1)
//            {
//                $key1 = $k1 - 11;
//                // 取词条，需要替换为从缓存中查询
//                $textList = (new Zl1SuitableLoverText())->batchGetInfoByIds($v1);
////                $textList = Db::table('wechat_backup_07_18_14_43_00.zl1_suitable_lover_text')->where('code', 'in', $v1)->column('text', 'code');
//                // 遍历词条，进行数据重组
//                foreach ($v1 as $v2)
//                {
//                    $preCode = substr($v2, 2, 2);
//                    // 导语
//                    if ($preCode === '00')
//                    {
//                        self::$TEXT_INTRO = $textList[$v2];
//                    } else
//                    {
//                        $key2 = $preCode - 1;
//                        $dataForResult[$k1][$key2]['img_title'] = 'res_' . $key1 . '/' . $key2 . '.png';
//                        $dataForResult[$k1][$key2]['text_list'][] = $textList[$v2] ?? '【' . $v2 . '】词条暂无';
//                    }
//                }
//                // 设置已解锁的数据
//                $data_tabs[$key1]['unlock_data']['list'] = $dataForResult[$k1];
//            }
            ##########################测试数据结束###########################
            $dataForResult = [];
            foreach ($reportData as $k1 => $v1)
            {
                if (!empty($v1['content']))
                {
                    $key1 = $k1 - 84;
                    // 取词条，需要替换为从缓存中查询
                    $textList = (new Zl1SuitableLoverText())->batchGetInfoByIds($v1['content']);
//                $textList = Db::table('wechat_backup_07_18_14_43_00.zl1_suitable_lover_text')->where('code', 'in', $v1['content'])->column('text', 'code');
                    // 遍历词条，进行数据重组
                    foreach ($v1['content'] as $v2)
                    {
                        $preCode = substr($v2, 2, 2);
                        // 导语
                        if ($preCode === '00')
                        {
                            self::$TEXT_INTRO = $textList[$v2];
                        } else
                        {
                            $key2 = $preCode - 1;
                            $dataForResult[$k1][$key2]['img_title'] = 'res_' . $key1 . '/' . $key2 . '.png';
                            $dataForResult[$k1][$key2]['text_list'][] = $textList[$v2] ?? '【' . $v2 . '】词条暂无';
                        }
                    }
                    // 设置已解锁的数据
                    $data_tabs[$key1]['unlock_data']['list'] = $dataForResult[$k1];
                }
            }

            //打点数据
            $sensor_data_unlock_list = [];
            if (isset($reportData[84]))
            {//终极契合型
                $sensor_data_unlock_list[] = '终极契合型';
            }
            if (isset($reportData[85]))
            {//甜蜜幸福型
                $sensor_data_unlock_list[] = '甜蜜幸福型';
            }
            if (isset($reportData[86]))
            {//虐恋型
                $sensor_data_unlock_list[] = '虐恋型';
            }

            $sensor_data = [
                'refer_name' => $refer_name,
                'unlock_list' => $sensor_data_unlock_list,
                'record_id' => $rid,
                'record_name' => $recode['name'],
                'unlock_all_list' => self::$TEXT_TAB_LIST,
            ];

        }
        catch (Exception $e)
        {
            Log::write(self::$LOG_PRE . '逻辑处理失败：line=' . $e->getLine() . ',message=' . $e->getMessage() . '[ ' . $e->getFile() . '：' . $e->getLine() . ' ]', 'error', true);
            $err_msg = '请求异常,请稍后重试！';
            return $this->fetchErr('index', $common_data, $err_msg);
        }

        return $this->fetch('index', array_merge($common_data, ['error_msg' => $err_msg], [
            'recode' => $recode,//顶部档案信息
            'intro_text' => self::$TEXT_INTRO,//导语文案
            'data_tabs' => $data_tabs,//tab栏里的数据
            'tab_index' => $tab_index,//当前选中的是第几个tab（0：终极契合性；1：甜蜜兴福型；2：虐恋型；）
            'data_unlock_all' => $data_unlock_all,//底部打包解锁全部的数据
            'data_catalog_list' => $data_catalog_list,//右侧目录列表里的数据
            'error_msg' => $err_msg,
            'sensor_data' => $sensor_data,//打点数据
            'price_unit' => $isCoinPay ? '准币' : '元'
        ]));
    }

    /**
     * 怎么追求Ta
     * @throws ApiException|\Exception
     */
    public function follow()
    {
        // 上线必须修改成false，关闭测试模式，测试模式为实时计算，页面无权限验证
        $isTest = false;
        $isCoinPay = Util::IsIos() && Util::CheckAppVersion('2.9.7') === '大' ? true : false;
        //请求参数
        $height = input('h/d', 0);//导航栏高度
        $rid1 = input('rid1/d', 0);//用户的第一个档案id（默认是自己）
        $rid2 = input('rid2/d', 0);//用户的第二个档案id
        $orderId = input('order_id/s', '');//可以为空，从订单进去的话传此参数，服务端检查此参数，如果存在那么都不展示档案修改
        $historyId = input('history_id/d', 0);//可以为空，从记录列表进去的话传此参数，服务端检查此参数，如果存在那么都不展示档案修改
        $refer_name = input('refer_name/s', '');//打点参考：https://srn8xwm09u.feishu.cn/sheets/shtcnv2QZe9osa4CfqJT02GlNTg  [220]
        $is_calculate = input('is_calculate/d', 0);//int，可以为空，默认0，是否计算（0：没有计算；1：点击计算按钮；）
        $rid_index = input('rid_index/d', 0);//int，可以为空，默认0，告诉服务器当前切换的档案是哪一个（用于切换档案的时候，如果已解锁，那么弹出alert，同时隐藏，哪一个档案）

        //终端类型（android/ios）
        $appType = $this->request->header('app-type');
        $token = $this->request->header('access-token');

        //是否展示js日志
        $is_show_log = 1;
        if ($this->env === 'online')
        {
            $is_show_log = 0;
        }

        //商品的gid
        $gid = $this->gids[4];

        //自定义变量
        $page_status = 0;//0：未选择档案；1：已选择档案，未计算；2：已选择档案，已计算；3：已解锁；
        $is_show_dot = 0;//是否显示 解锁记录的红点标示
        $err_msg = '';//异常信息，为空不提示
        $seifRid = 0;//自己的档案id

        //弹出的对话框
        $alert = [
            'is_show' => false,
            'msg' => '',
            'link' => ''
        ];

        $data_unlock_all = [
            'is_show' => 0,//0：不显示；1：显示；（注意：解锁了一个以上，那么底部打包解锁隐藏）
            'time' => 0,//活动倒计时时间，小于等于0不显示，活动标示
            'price' => 0,//打包解锁现价
            'price_orginal' => 0,//打包解锁原价格
            'link' => 'pay_order?type=25&rid1=' . $rid1 . '&rid2=' . $rid2 . '&gid=' . $gid . '&need_auth=1',//“鉴渣神器”下单页
        ];

        //正常、异常 页面通用数据
        $common_data = [
            'appType' => $appType,//app类型【android/ios】
            'height' => $height,//导航栏高度
            'is_show_nav' => 1,//是否展示导航栏
            'nav_right_click_link' => 'relation_research_follow_history_list?need_auth=2',//导航栏右侧切换档案的link参数
            'is_show_log' => $is_show_log,//是否展示js日志
            'is_calculate' => $is_calculate,
            'is_show_dot' => $is_show_dot,//红点标示
            'sensor_data' => [
                'refer_name' => $refer_name,
            ],//打点数据
        ];

        //介绍数据
        $intro_data = [
            [
                'title' => '喜欢一个人应该怎么追？',
                'list' => [
                    '或许你已经暗恋TA很久，却不知该如何表达？',
                    '或许你们朝夕相处，却无法引起TA的注意？',
                    '了解TA的喜恶、投其所好，才是追求一个人的最佳方式。'
                ]
            ], [

                'title' => '或许你想知道',
                'list' => [
                    'Ta喜欢的类型？',
                    'Ta是如何看待你的？',
                    '追求Ta的最佳时间段？',
                    '如何吸引Ta的注意力？',
                    '注意哪些雷区和禁忌？',
                    '如何与Ta更好的相处？',
                    '追求Ta时应该怎么做？'
                ]
            ]
        ];

        //计算的，星级数据
        $calculate_star_data = [
            'star_selected_list' => $this->getStarFromInt(0),
            'star_normal_list' => $this->getStarFromInt(10),
            'tag' => '',
            'res' => '',
        ];

        //购买时的档案信息数据
        $data_recode_change = [//购买时的档案信息
            'is_show' => 0,//是否展示【0：不展示；1：展示】
            'is_expand' => 0,//是否展开（当is_show=1时有效）
            'info' => [],//修改档案以后，之前的档案信息
        ];

        //已经计算了，但是没有解锁的数据
        $calculate_data = [
            [
                'icon' => $this->oss . '/web/follow/catalog/like_type.png',
                'title' => 'Ta可能喜欢的类型',
                'content_list' => [],
                'status' => 5,//0：不展示详细内容；1：隐藏展示；2：已解锁；3：文字列表；（我有哪些优势）4：标签列表；（不实现）5：分段展示（Ta可能喜欢的类型）；6：分段展示文字列表样式（Ta有哪些雷区和禁忌)；7：分段展示文字列表，并且标题与描述分开（应该怎么做？
                'is_show_only_eye' => true,//是否展示
            ],
            [
                'icon' => $this->oss . '/web/follow/catalog/advantage.png',
                'title' => '我有哪些优势',
                'content' => '',
                'status' => 0,
            ],
            [
                'icon' => $this->oss . '/web/follow/catalog/weakness.png',
                'title' => 'Ta有哪些雷区和禁忌',
                'content' => '',
                'status' => 0,
            ],
            [
                'icon' => $this->oss . '/web/follow/catalog/todo.png',
                'title' => '应该怎么做？',
                'content' => '',
                'status' => 0,
            ],
        ];

        //已经解锁的数据
        $unlock_data = [
//            [
//                'icon' => $this->oss . '/web/follow/catalog/like_type.png',
//                'title' => 'Ta可能喜欢的类型',
//                'content_list' => [
//                    'Ta追求浪漫且隆重华丽的感情模式，在感情中渴望得到认可与赞赏。
// <span>所以Ta喜欢善解人意，对外落落大方，对Ta撒娇顺从的类型。</span>',
//                    'Ta追求浪漫且有仪式感的感情模式，在感情中渴望得到宠爱与陪伴。
// <span>所以Ta喜欢浪漫有情调，心地善良，富有同理心的类型。</span>'
//                ],
//                'status' => 5,//0：不展示详细内容；1：隐藏展示；2：已解锁；3：文字列表；（我有哪些优势）4：标签列表；（不实现）5：分段展示（Ta可能喜欢的类型）；6：分段展示文字列表样式（Ta有哪些雷区和禁忌)；7：分段展示文字列表，并且标题与描述分开（应该怎么做？）
//
//            ],
//            [
//                'icon' => $this->oss . '/web/follow/catalog/advantage.png',
//                'title' => '我有哪些优势',
//                'content_list' => [
//                    '你是一个在感情中精力旺盛，带动性强，能给对方带来动力的人。',
//                    '活泼开朗，勇于表现，富有激情与活力是你在感情中的优势。',
//                    '懂得享受生活，善于付出物质，富有耐力与责任心是你在感情中的优势。',
//                    '你是一个在感情中风趣幽默，会制造惊喜，能让对方感到新鲜感的人。'
//                ],
//                'status' => 3,
//            ],
//            [
//                'icon' => $this->oss . '/web/follow/catalog/weakness.png',
//                'title' => 'Ta有哪些雷区和禁忌',
//                'content_list' => [
//                    '<span>Ta不喜欢过于死板，墨守成规的人，</span>生活中的小惊喜会让Ta十分憧憬，新鲜感对Ta来讲是生活中不可或缺的元素。',
//                    '<span>Ta不喜欢想法较少，过于普通的人，</span>Ta需要看到伴侣的创意和特别，会比较反感伴侣在生活中的“摆烂”行为。'
//                ],
//                'status' => 6,
//            ],
//            [
//                'icon' => $this->oss . '/web/follow/catalog/todo.png',
//                'title' => '应该怎么做？',
//                'content_list' => [
//                    [
//                        'des_type' => 0,//描述背景颜色【0:白色背景；1：粉红色背景；】
//                        'title' => '怎么做是Ta喜欢的方式？',
//                        'des' => 'Ta是勇敢追爱的类型，也更容易被热情、活泼、乐观、向上的人所吸引。因此，你可以在Ta面前多多展现自己这些方面的特质，会更容易获得Ta的注意力。Ta期待的是充满生命力的、热烈的爱情，因此除了在细节之处的体贴表现，多给Ta准备一些意料之外的惊喜，带Ta体验各种让肾上腺素飙升的活动，更容易让Ta对你产生与爱情有关的好感。'
//                    ],
//                    [
//                        'des_type' => 0,
//                        'title' => '怎么做满足Ta的安全感',
//                        'des' => '在相处中多去展现你浪漫、体贴的一面更能满足Ta内心对安全感的需求。例如偶尔用古早的方式用心地写一封情书，时不时为Ta制造惊喜，送一些有特别的意义的礼物。Ta是特别渴望被爱的类型，在感情里也容易敏感、患得患失，所以不要对Ta忽冷忽热，每一天都要嘘寒问暖、关心到位，要信息秒回，让Ta感觉你把Ta放在第一位，会特别打动Ta。'
//                    ],
//                    [
//                        'des_type' => 0,
//                        'title' => '两个人适合的相处模式',
//                        'des' => 'Ta很容易被你付出的点滴所吸引，你对待生活的态度正好符合Ta心中对于伴侣的期待。你们的日常习性搭调，双方会交流很多关于工作生活的想法，只要你能再多多关心Ta在生活中遇到的小事，往往会让Ta加深对你的好感。
//在你们的互动过程中，Ta会觉得踏实安稳，你能够给予Ta宛如家人般的感觉。与你的互动会给Ta带来心灵层面的安宁，使Ta在不知不觉中慢慢沉沦。',
//                    ],
//                    [
//                        'des_type' => 1,
//                        'title' => '最佳追求时间（未来一年）',
//                        'des' => '<span>（2022年9月、10月、2023年1月）是追求Ta的最佳时间段，也非常有利于你们的关系进展。</span>
//这段时间内Ta对爱情将会更加渴望，内心深处对于情感的强烈需要也让Ta更容易被感动。因此，在追求Ta的过程中可以尝试贴合Ta的情感需求，这样才能提高追到Ta的概率哦。
//',
//                    ],
//                ],
//                'status' => 7,
//            ],
        ];


        //已计算或者已解锁的分享的数据
        $share_data = [
            'is_show' => 0,//是否显示
            'data' => [
                "recodes" => [
                    [
                        "avatar" => "",
                        "name" => "",
                        "asc" => ""
                    ],
                    [
                        "avatar" => "",
                        "name" => "",
                        "asc" => ""
                    ]
                ],
                "star_section" => [
                    "title" => '追求难度星级',
                    "star" => 0,
                    "tag_pre" => '潜在竞争对手：',
                    "tag" => '',
                    "res" => '',
                ]
            ]
        ];

        $uid = 0;
        //校验token
        try
        {
            if (!$isTest)
            {//正式上线后
                if ($token)
                {//已登录
                    $auth = new Auth();
                    $auth->checkRequestAuth();
                    $userInfo = $auth->user;
                    $seifRid = (int)$userInfo['rid'];
                    $uid = $userInfo ? (int)$userInfo['id'] : 0;
                }
            } else
            {//测试情况

                //未登录
//                $token = '';
                //https://local-beta-wechat.goddessxzns.com/web/relation_research_fit_you/follow?h=20

                //beta已登录
                $token = '123';
                $uid = 12345883;//mark173
//                $seifRid = 4923176;//自己的档案
                $seifRid = 0;//没有自己的档案

                //0：未选择档案；（默认选中自己的档案）
//                $rid1 = 0;
//                $rid2 = 0;
//                https://local-beta-wechat.goddessxzns.com/web/relation_research_fit_you/follow?h=20

                //1：已选择档案，未计算；
//                $rid1=4923176;//自己的档案
//                $rid2=4922870;//“修改了之后又有了更美”档案（有alert，未计算，有头像，档案名比较长）
//                $rid2=4922869;//“你你你”档案（无alert，未计算，无头像）
//                https://local-beta-wechat.goddessxzns.com/web/relation_research_fit_you/follow?h=20&rid1=4923176&rid2=4922869

                //2：已选择档案，已计算；
//                $rid1 = 4923265;//傻逼的档案
//                $rid2 = 4922869;//“你你你”档案（无alert，未计算，无头像）
//                https://local-beta-wechat.goddessxzns.com/web/relation_research_fit_you/follow?h=20&rid1=4923265&rid2=4922869&is_calculate=1

                //已解锁的情况
                //order_id=18202208050936597006, Mark和AAaa【档案没有变化】
                //https://local-beta-wechat.goddessxzns.com/web/relation_research_fit_you/follow?order_id=18202208050936597006&rid1=4923176&rid2=4922163&need_auth=0&zhunle_not_show_nav=1

                //history_id=25，Mark和“修改了之后又有了更美”【档案变化了】
                //https://local-beta-wechat.goddessxzns.com/web/relation_research_fit_you/follow?rid1=4923176&rid2=4922870&order_id=&history_id=25&need_auth=2&zhunle_not_show_nav=1&zhunle_nav_text_color=1&refer_name=%E6%80%8E%E4%B9%88%E8%BF%BD%E6%B1%82Ta%E8%A7%A3%E9%94%81%E8%AE%B0%E5%BD%95&h=20

            }
            if ($token)
            {//已登录
                if ($rid1 === 0)
                {//如果没有传第一个档案的rid，那么把自己的档案赋值进去
                    $rid1 = $seifRid;
                }
                $recodeDetail = (new Recode())->getRecode(['uid' => $uid, 'id' => $rid1]);
                if (!$recodeDetail)
                {
                    $recodeDetail = [];
                }
                if ($rid2 !== 0)
                {//检查这个档案是否是该用户的，如果不是会抛异常
                    $recodeDetail2 = (new Recode())->getRecode(['uid' => $uid, 'id' => $rid2]);
                    if (!$recodeDetail2)
                    {
                        $recodeDetail2 = [];
                    }
                } else
                {
                    $recodeDetail2 = [];
                }
            } else
            {//未登录
                $recodeDetail = [];
                $recodeDetail2 = [];
            }

            $recode1 = $this->getRecodeInfoInFollow($recodeDetail, $seifRid);//第一个档案的信息
            $recode2 = $this->getRecodeInfoInFollow($recodeDetail2, $seifRid, 2);//第二个档案的信息
        }
        catch (Exception $e)
        {
            Log::write(self::$LOG_FLLOW_PRE . '权限认证失败：line=' . $e->getLine() . ',msg=' . $e->getMessage() . '[ ' . $e->getFile() . '：' . $e->getLine() . ' ]', 'error', true);
            if ($err_msg === '')
            {
                $err_msg = '请求异常,请稍后重试！';
            }
            return $this->fetchErr('follow', $common_data, $err_msg);
        }


        try
        {

            $mZl1RelationAnalysisReport = new Zl1RelationAnalysisReport();

            if ($orderId || $historyId)
            {
                $reportData = [];
                if ($orderId)
                {//订单详情查看
                    $reportData = $mZl1RelationAnalysisReport->getOrderRelationAnalysisReport($uid, $rid1, $rid2, 1, $orderId);
                }
                if ($historyId)
                {//解锁记录查看
                    $reportData = $mZl1RelationAnalysisReport->getRelationAnalysisReport($uid, $historyId, 1, $recodeDetail, $recodeDetail2);
                }

                //查看了报告，消除这个报告的红点
                if (isset($reportData['id']))
                {
                    $mZl1RelationAnalysisReport->reportRead($uid, $reportData['id'], 1, $rid1, $rid2);
                }

                if ($reportData)
                {
                    $res = $this->customFollowData($reportData, $seifRid);
                    $page_status = $res['page_status'] > 0 ? $res['page_status'] : $page_status;//0：未选择档案；1：已选择档案，未计算；2：已选择档案，已计算；3：已解锁
                    $data_recode_change = $res['data_recode_change'] ?: $data_recode_change;
                    $unlock_data = $res['unlock_data'] ?: $unlock_data;
                    $calculate_star_data = $res['calculate_star_data'] ?: $calculate_star_data;
                    $err_msg = $res['err_msg'] ?: $err_msg;

                    //只有已经解锁了，才能分享
                    $share_data['data']['recodes'][0] = $this->getRecodeInfoInFollow($recodeDetail, $seifRid, 1, true);
                    $share_data['data']['recodes'][1] = $this->getRecodeInfoInFollow($recodeDetail2, $seifRid, 2, true);
                    $share_data['data']['star_section']['star'] = $reportData['content']['difficulty'];
                    $share_data['data']['star_section']['tag'] = $this->getFollowRival($reportData['content']['difficulty']);
                    $share_data['data']['star_section']['res'] = $this->getFollowDifficulty($reportData['content']['difficulty']);
                    $share_data['is_show'] = 1;
                }
            } else if ($rid1 && $rid2)
            {//选择了档案，那么查询一下，是否解锁了
                $unlockData = $mZl1RelationAnalysisReport->getRelationAnalysisReportIsUnlock($uid, 1, $rid1, $rid2);
                if (!$unlockData['is_unlock'])
                {//没有解锁
                    if ($is_calculate)
                    {
                        //用户点击了计算
                        $page_status = 2;//0：未选择档案；1：已选择档案，未计算；2：已选择档案，已计算；3：已解锁

                        //查询活动数据
                        $goodData = (new Goods())->GoodsTypeInfo(25);//查询所有商品
                        $goodData = array_column($goodData, null, 'id');
                        (new ZhunleActivity())->goodsActiveInfo(25, $goodData);//获取活动数据

                        $is_show_active = false;//是否展示活动
                        $time = 0;//倒计时（秒）
                        $price_orginal = $goodData[$gid]['now_prize'];//原价
                        $price = $price_orginal;//活动价格

                        if (isset($goodData[$gid]['active']))
                        {//存在活动，那么设置为【1：未解锁（有活动）】
                            $is_show_active = true;
                            $price = $goodData[$gid]['active']['price'];//重新设置活动价格
                            $time = $goodData[$gid]['active']['count_down'];
                        }

                        $data_unlock_all = [
                            'is_show' => $is_show_active ? 1 : 0,//0：不显示；1：显示；（注意：解锁了一个以上，那么底部打包解锁隐藏）
                            'time' => $time,//活动倒计时时间，小于等于0不显示，活动标示
                            'price' => $isCoinPay ? floor($price * 10) : $price,//打包解锁现价
                            'price_orginal' => $isCoinPay ? floor($price_orginal * 10) : $price_orginal,//打包解锁原价格
                            'link' => 'pay_order?type=25&rid1=' . $rid1 . '&rid2=' . $rid2 . '&gid=' . $gid . '&need_auth=1',//“鉴渣神器”下单页
                        ];

                        //没有解锁，并且用户点击了计算，那么实时计算一下
                        $calculateData = (new HowToWooHim())->setUserRecord([$recodeDetail, $recodeDetail2])->free();
//                        计算结果数据如下：
//                        array (
//                            'code' =>
//                                array (
//                                    0 => '10000007',
//                                    1 => '10000110',
//                                ),
//                            'difficulty' => 3, //追求难度星级
//                            'rival' => 2,//竞争对手数 分为三个级别：【1 => 几乎没有;2 => 有点多3 => 去排队】
//                        )

                        //数据转换
                        if ($calculateData && isset($calculateData['code'], $calculateData['difficulty'], $calculateData['rival']))
                        {
                            $textList = (new ZlWoohimReportText())->batchGetInfoByIds($calculateData['code']);
                            foreach ($textList as $v)
                            {
//                                $text = str_replace('[', '[<br>', $v);
//                                $calculate_data[0]['content_list'][] = str_replace(['[', ']'], ['<span>', '</span>'], $text);
                                $text_black = substr($v, 0, strpos($v, '['));
                                $text_red = substr($v, strpos($v, '[') + 1, strpos($v, ']') - strpos($v, '[') - 1);

                                $calculate_data[0]['content_list'][] = [
                                    [
                                        'des_type' => 0,//0：黑色；1：红色；
                                        'des' => $text_black
                                    ],
                                    [
                                        'des_type' => 1,//0：黑色；1：红色；
                                        'des' => $text_red
                                    ],
                                ];

                            }

                            //计算的，星级数据
                            $calculate_star_data = [
                                'star_selected_list' => $this->getStarFromHalf($calculateData['difficulty'] * 2),
                                'star_normal_list' => $this->getStarFromHalf(10 - $calculateData['difficulty'] * 2, false),
                                'tag' => $this->getFollowRival($calculateData['difficulty']),
                                'res' => $this->getFollowDifficulty($calculateData['difficulty']),
                            ];
//                            if ($isTest)
//                            {//测试数据
//                                $calculateData['difficulty'] = 3.5;//测试半颗星
//                                $calculate_star_data = [
//                                    'star_selected_list' => $this->getStarFromHalf($calculateData['difficulty'] * 2),
//                                    'star_normal_list' => $this->getStarFromHalf(10 - $calculateData['difficulty'] * 2, false),
//                                    'tag' => $this->getFollowRival($calculateData['rival']),
//                                    'res' => $this->getFollowDifficulty($calculateData['difficulty']),
//                                ];
//                            }
                        } else
                        {//实时计算数据返回异常
                            Log::write(self::$LOG_FLLOW_PRE . '实时计算返回数据异常：[' . json_encode($calculateData, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . ']', 'error', true);
                            $err_msg = '计算失败，请稍后重试！';
                        }
                    } else
                    {//用户没有点击计算
                        $page_status = 1;
                    }
                } else
                {//有数据说明该档案已经解锁过了，弹出alert

                    if ($rid_index === 2)
                    {//第二个档案
                        $recode2 = $this->getRecodeInfoInFollow([], $seifRid, 2);
                    } else if ($rid_index === 1)
                    {//第一个档案
                        $recode1 = $this->getRecodeInfoInFollow([], $seifRid);
                    }
                    $alert['is_show'] = true;
                    $alert['msg'] = '该档案已经解锁，你可以在解锁记录中查看。';
                    $alert['link'] = 'relation_research_follow_history_list?need_auth=2';//这里跳转到解锁记录列表
                }
            }

            //订单id和历史记录id为空的时候，并且已登录，才去获取红点信息
            if (empty($orderId) && empty($historyId) && $token)
            {
                $common_data['is_show_dot'] = (new Zl1RelationAnalysisReport)->getReportIsNew($uid, 1) ? 1 : 0;//红点标示
            }

        }
        catch (Exception $e)
        {
            Log::write(self::$LOG_FLLOW_PRE . '逻辑处理失败：line=' . $e->getLine() . ',message=' . $e->getMessage() . '[ ' . $e->getFile() . '：' . $e->getLine() . ' ]', 'error', true);
            if ($err_msg === '')
            {
                $err_msg = '请求异常,请稍后重试！';
            }

            return $this->fetchErr('follow', $common_data, $err_msg);
        }

        return $this->fetch('follow', array_merge($common_data, ['error_msg' => $err_msg], [
            'page_status' => $page_status,//页面状态
            'recode1' => $recode1,//第一个档案的信息
            'recode2' => $recode2,//第二个档案的信息
            'intro_data' => $intro_data,//商品介绍信息
            'calculate_star_data' => $calculate_star_data,//计算的星级信息
            'unlock_data' => $page_status === 3 ? $unlock_data : $calculate_data,//已解锁的数据 或者 计算的数据
            'data_recode_change' => $data_recode_change,//购买时的档案数据
            'data_unlock_all' => $data_unlock_all,//底部打包解锁全部的数据
            'alert' => $alert,//弹出的alert
            'error_msg' => $err_msg,
            'share_data' => [
                'is_show' => $share_data['is_show'],
                'data' => json_encode($share_data['data'], true)
            ],//分享的数据，只有已解锁的有
            'price_unit' => $isCoinPay ? '准币' : '元'
        ]));
    }

    /**
     * 鉴渣
     * @throws ApiException|\Exception
     */
    public function check_player()
    {
        // 上线必须修改成false，关闭测试模式，测试模式为实时计算，页面无权限验证
        $isTest = false;

        //请求参数
        $height = input('h/d', 0);//导航栏高度
        $rid = input('rid/d', 0);//用户的档案id
        $orderId = input('order_id/s', '');//可以为空，从订单进去的话传此参数，服务端检查此参数，如果存在那么都不展示档案修改
        $historyId = input('history_id/d', 0);//可以为空，从记录列表进去的话传此参数，服务端检查此参数，如果存在那么都不展示档案修改
        $refer_name = input('refer_name/s', '');//打点参考：https://srn8xwm09u.feishu.cn/sheets/shtcnv2QZe9osa4CfqJT02GlNTg  [220]
        $is_calculate = input('is_calculate/d', 0);//int，可以为空，默认0，是否计算（0：没有计算；1：点击计算按钮；）

        //终端类型（android/ios）
        $appType = $this->request->header('app-type');
        $token = $this->request->header('access-token');

        //是否展示js日志
        $is_show_log = 1;
        if ($this->env === 'online')
        {
            $is_show_log = 0;
        }

        //商品的gid
        $gid = $this->gids[5];

        //解锁需要传的link数据列表
        $link_order = 'pay_order?type=26&rid=' . $rid . '&gid=' . $gid . '&need_auth=1';//“鉴渣神器”下单页
        $link_change_recode = 'change_single_recode?current_rid=' . $rid . '&need_auth=2';//切换档案
        $link_history = 'relation_research_check_player_history_list?need_auth=2';//导航栏右侧的 解锁记录

        //自定义变量
        $page_status = 0;//0：未选择档案；1：已选择档案，未计算；2：已选择档案，已计算；3：已解锁；
        $is_show_dot = 0;//是否显示 解锁记录的红点标示
        $err_msg = '';//异常信息，为空不提示
        $seifRid = 0;//自己的档案id
        $data_unlock_all = [
            'is_show' => 0,//0：不显示；1：显示；（注意：解锁了一个以上，那么底部打包解锁隐藏）
            'time' => 0,//活动倒计时时间，小于等于0不显示，活动标示
            'price' => 0,//打包解锁现价
            'price_orginal' => 0,//打包解锁原价格
            'link' => $link_order,//“鉴渣神器”下单页
        ];
        //弹出的对话框
        $alert = [
            'is_show' => false,
            'msg' => '',
            'link' => ''
        ];


        //正常、异常 页面通用数据
        $common_data = [
            'appType' => $appType,//app类型【android/ios】
            'height' => $height,//导航栏高度
            'is_show_nav' => 1,//是否展示导航栏
            'nav_right_click_link' => $link_history,//导航栏右侧切换档案的link参数
            'change_single_recode_link' => $link_change_recode,
            'is_show_log' => $is_show_log,//是否展示js日志
            'is_calculate' => $is_calculate,
            'sensor_data' => [
                'refer_name' => $refer_name,
            ],//打点数据
        ];

        $calculate_probability = 0;//计算出来的可能性

        //购买时的档案信息数据
        $data_recode_change = [//购买时的档案信息
            'is_show' => 0,//是否展示【0：不展示；1：展示】
            'is_expand' => 0,//是否展开（当is_show=1时有效）
            'info' => [],//修改档案以后，之前的档案信息
        ];

        //已经计算了，但是没有解锁的数据
        $calculate_data = [
            [
                'icon' => $this->oss . '/web/check_player/catalog/according.png',
                'title' => '依据一',
                'content' => '',
                'star' => $this->getStarFromInt(),
                'status' => 1,//0：不展示详细内容；1：隐藏展示；2：已解锁；
            ],
            [
                'icon' => $this->oss . '/web/check_player/catalog/according.png',
                'title' => '更多依据',
                'content' => '',
                'star' => $this->getStarFromInt(),
                'status' => 0,
            ],
            [
                'icon' => $this->oss . '/web/check_player/catalog/performance.png',
                'title' => '“不靠谱”的表现形式',
                'content' => '',
                'star' => $this->getStarFromInt(),
                'status' => 0,
            ],
            [
                'icon' => $this->oss . '/web/check_player/catalog/manner.png',
                'title' => '对异性的态度',
                'content' => '',
                'star' => $this->getStarFromInt(),
                'status' => 0,
            ],
        ];

        //已经解锁的数据
        $unlock_data = [
//            [
//                'icon' => $this->oss . '/web/check_player/catalog/according.png',
//                'title' => '依据一',
//                'content' => '因为Ta的金星落11宫，所以Ta的人缘不错，身边会围绕着各式各样的朋友，相应的感情上选择的机会也会比较多，心思很难专注地放在一个人身上。',
//                'star' => $this->getStarFromInt(3),
//                'status' => 2,//0：不展示详细内容；1：隐藏展示；2：已解锁；3：文字列表；4：标签列表；
//            ],
//            [
//                'icon' => $this->oss . '/web/check_player/catalog/according.png',
//                'title' => '依据二',
//                'content' => '因为Ta金星落双鱼座，所以Ta是一个非常浪漫的人，憧憬美好的爱情。Ta对于爱情是不设限的，因此Ta在感情中也会显得没有边界感，经常滥情而不自知。',
//                'star' => $this->getStarFromInt(2),
//                'status' => 2,
//            ],
//            [
//                'icon' => $this->oss . '/web/check_player/catalog/according.png',
//                'title' => '依据三',
//                'content' => '因为Ta的金星与月亮产生了合相，所以Ta的共情能力很强，对人也很温柔，和Ta在一起会时刻感受到满满都爱意。但是也因为性格太柔和，也会出现不懂拒绝人的情况。',
//                'star' => $this->getStarFromInt(1),
//                'status' => 2,
//            ],
//            [
//                'icon' => $this->oss . '/web/check_player/catalog/according.png',
//                'title' => '依据四',
//                'content' => '因为Ta的金星刑克了冥王，Ta对喜欢的人会有执念，也还算忠诚。但因为Ta对“性”的需求很强烈，当诱惑出现时，Ta不一定能够抵挡得住。',
//                'star' => $this->getStarFromInt(3),
//                'status' => 2,
//            ],
//            [
//                'icon' => $this->oss . '/web/check_player/catalog/performance.png',
//                'title' => '“不靠谱”的表现形式',
//                'content' => '',
//                'content_list' => ['喜欢搞暧昧', '逃避责任', '过于博爱', '深情，但不多'],
//                'status' => 3,
//            ],
//            [
//                'icon' => $this->oss . '/web/check_player/catalog/manner.png',
//                'title' => '对异性的态度',
//                'content' => '',
//                'content_list' => ['一视同仁', '忽冷忽热', '礼貌且有距离感', '忽冷忽热', '礼貌且有距离感', '一见钟情一见钟情', '忽冷忽热', '一视同仁', '忽冷忽热', '礼貌且有距离感', '忽冷忽热', '礼貌且有距离感', '一见钟情一见钟情', '忽冷忽热'],
//                'selected_index' => 0,
//                'status' => 4,
//            ],
        ];

        //已计算或者已解锁的分享的数据
        $share_data = [
            'is_show' => 0,//是否显示
            'data' => [
                "percent" => 0,
                "recode" => [
                    "avatar" => "",
                    "name" => "",
                ],
                "list" => [
                    [
                        "type" => 0,
                        "title" => "“不靠谱”的表现形式",
                        "words" => [],
                    ],
                    [
                        "type" => 1,
                        "title" => "对异性的态度",
                        "words" => [],
                    ]
                ]
            ]
        ];

        $uid = 0;
        //校验token
        try
        {
            if (!$isTest)
            {//正式上线后
                if ($token)
                {//不为空，说明已经登录了
                    $auth = new Auth();
                    $auth->checkRequestAuth();
                    $userInfo = $auth->user;
                    $seifRid = (int)$userInfo['rid'];
                    $uid = $userInfo ? (int)$userInfo['id'] : 0;
                }

            } else
            {//测试情况
                //未登录
                //$token='';

                //beta已登录
                $token = '123';
                //测试（下面是beta的uid和rid）
                $uid = 12345883;//mark173
                $seifRid = 4923176;//自己的档案

                //0：未选择档案；
//                $rid = 0;
                //https://local-beta-wechat.goddessxzns.com/web/relation_research_fit_you/check_player?h=20

                //1：已选择档案，未计算；
                //$rid = 4923176;//自己的档案（已解锁，有alert）
                //$rid = 4922867;//“切切切”档案（未解锁，无alert，无头像）
                //$rid = 4922870;//“修改了之后又有了更美”档案（未解锁，无alert，有头像）
                //https://local-beta-wechat.goddessxzns.com/web/relation_research_fit_you/check_player?h=20&rid=4922870

                //2：已选择档案，已计算；
//                $rid = 4922867;//“切切切”档案（未解锁，无alert，无头像）
//                $rid = 4922870;//“修改了之后又有了更美”档案（未解锁，无alert，有头像）
                //https://local-beta-wechat.goddessxzns.com/web/relation_research_fit_you/check_player?h=20&rid=4922870&is_calculate=1


                //测试已解锁的情况
                //$rid = 4921943;//“Libn”档案【档案未改变】
                //https://local-beta-wechat.goddessxzns.com/web/relation_research_fit_you/check_player?rid=4921943&order_id=&history_id=3&need_auth=2&zhunle_not_show_nav=1&zhunle_nav_text_color=1&refer_name=%E9%89%B4%E2%80%9C%E6%B8%A3%E2%80%9D%E7%A5%9E%E5%99%A8%E8%A7%A3%E9%94%81%E8%AE%B0%E5%BD%95&h=20
                //$rid = 4921943;//“傻逼”档案【档案已改变】
                //https://local-beta-wechat.goddessxzns.com/web/relation_research_fit_you/check_player?rid=4923265&order_id=&history_id=109&zhunle_not_show_nav=1&zhunle_nav_text_color=1&h=39

            }

            if ($rid !== 0 && $token)
            {//检查这个档案是否是该用户的，如果不是会抛异常
                $recodeDetail = (new Recode())->getRecode(['uid' => $uid, 'id' => $rid]);
            } else
            {//没有传过档案来，那么默认是空的（不自动选中自己）
                $recodeDetail = [];
            }
        }
        catch (Exception $e)
        {
            Log::write(self::$LOG_CHECK_PLAYER_PRE . '权限认证失败：line=' . $e->getLine() . ',msg=' . $e->getMessage() . '[ ' . $e->getFile() . '：' . $e->getLine() . ' ]', 'error', true);
            $err_msg = '请求异常,请稍后重试！';
            return $this->fetchErr('check_player', $common_data, $err_msg);
        }

        try
        {
            $mZl1RelationAnalysisReport = new Zl1RelationAnalysisReport();

            if ($orderId || $historyId)
            {
                $reportData = [];
                if ($orderId)
                {//订单详情查看
                    $reportData = $mZl1RelationAnalysisReport->getOrderRelationAnalysisReport($uid, $rid, 0, 2, $orderId);
                }
                if ($historyId)
                {//解锁记录查看
                    $reportData = $mZl1RelationAnalysisReport->getRelationAnalysisReport($uid, $historyId, 2, $recodeDetail, []);
                }

                //查看了报告，消除这个报告的红点
                if (isset($reportData['id']))
                {
                    $mZl1RelationAnalysisReport->reportRead($uid, $reportData['id'], 2, $rid);
                }

                if ($reportData)
                {
                    $res = $this->customCheckPlayerData($reportData, $seifRid);
                    $page_status = $res['page_status'] > 0 ? $res['page_status'] : $page_status;//0：未选择档案；1：已选择档案，未计算；2：已选择档案，已计算；3：已解锁
                    $data_recode_change = $res['data_recode_change'] ?: $data_recode_change;
                    $unlock_data = $res['unlock_data'] ?: $unlock_data;
                    $calculate_probability = $res['calculate_probability'] ?: $calculate_probability;
                    $err_msg = $res['err_msg'] ?: $err_msg;

                    //分享的数据
                    $share_data['data']['recode'] = $this->getRecodeInfoInCheckPlayer($recodeDetail, $seifRid, true);
                    $share_data['data']['percent'] = $calculate_probability;
                    //获取最后两个
                    if (isset($res['unlock_data']))
                    {
                        if (isset($res['unlock_data'][count($res['unlock_data']) - 2]['content_list']))
                        {
                            $share_data['data']['list'][0]['words'] = array_slice($res['unlock_data'][count($res['unlock_data']) - 2]['content_list'], 0, 2);
                        }

                        if (isset($res['unlock_data'][count($res['unlock_data']) - 1]['content_list']))
                        {
                            $share_data['data']['list'][1]['words'] = $res['unlock_data'][count($res['unlock_data']) - 1]['content_list'];
                        }
                        $share_data['is_show'] = 1;
                    }
                }

            } else if ($rid)
            {//选择了档案，那么查询一下，是否解锁了
                $unlockData = $mZl1RelationAnalysisReport->getRelationAnalysisReportIsUnlock($uid, 2, $rid);
                if (!$unlockData['is_unlock'])
                {//没有解锁
                    if ($is_calculate)
                    {
                        //用户点击了计算
                        $page_status = 2;//0：未选择档案；1：已选择档案，未计算；2：已选择档案，已计算；3：已解锁

                        //查询活动数据
                        $goodData = (new Goods())->GoodsTypeInfo(26);//查询所有商品
                        $goodData = array_column($goodData, null, 'id');
                        (new ZhunleActivity())->goodsActiveInfo(26, $goodData);//获取活动数据

                        $is_show_active = false;//是否展示活动
                        $time = 0;//倒计时（秒）
                        $price_orginal = $goodData[$gid]['now_prize'];//原价
                        $price = $price_orginal;//活动价格

                        if (isset($goodData[$gid]['active']))
                        {//存在活动，那么设置为【1：未解锁（有活动）】
                            $is_show_active = true;
                            $price = $goodData[$gid]['active']['price'];//重新设置活动价格
                            $time = $goodData[$gid]['active']['count_down'];
                        }

                        $data_unlock_all = [
                            'is_show' => $is_show_active ? 1 : 0,//0：不显示；1：显示；（注意：解锁了一个以上，那么底部打包解锁隐藏）
                            'time' => $time,//活动倒计时时间，小于等于0不显示，活动标示
                            'price' => $price,//打包解锁现价
                            'price_orginal' => $price_orginal,//打包解锁原价格
                            'link' => $link_order
                        ];

                        //没有解锁，并且用户点击了计算，那么实时计算一下
                        $calculateData = (new AuthenticatePlayboy())->setUserRecord($recodeDetail)->free();
//                        计算结果数据如下：
//                        array (
//                            'probability' => 33.0,
//                            'code' =>
//                                array (
//                                    0 => '10000101',
//                                    1 => '100103',
//                                    2 => '100203',
//                                ),
//                        )
                        //数据转换
                        if ($calculateData && isset($calculateData['code'], $calculateData['probability']))
                        {
                            $textList = (new ZlPlayboyReportText())->batchGetInfoByIds($calculateData['code']);
                            foreach ($textList as $v)
                            {//词条只取一个
                                $calculate_data[0]['content'] = $v['text'];
                                $calculate_data[0]['star'] = $this->getStarFromInt($v['level']);
                                break;
                            }
                            //赋值，计算的可能性数据
                            $calculate_probability = $calculateData['probability'];

                        } else
                        {//实时计算数据返回异常
                            Log::write(self::$LOG_FLLOW_PRE . '实时计算返回数据异常：[' . json_encode($calculateData, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . ']', 'error', true);
                            $err_msg = '计算失败，请稍后重试！';
                        }
                    } else
                    {//用户没有点击计算
                        $page_status = 1;
                    }
                } else
                {//有数据说明该档案已经解锁过了，弹出alert
                    $alert['is_show'] = true;
                    $alert['msg'] = '该档案已经解锁，你可以在解锁记录中查看。';
                    $alert['link'] = $link_history;//这里跳转到解锁记录列表
                }
            }

            //订单id和历史记录id为空的时候，并且已登录，才去获取红点信息
            if (empty($orderId) && empty($historyId) && $token)
            {
                $is_show_dot = (new Zl1RelationAnalysisReport)->getReportIsNew($uid, 2) ? 1 : 0;//红点标示
            }
        }
        catch (Exception $e)
        {
            Log::write(self::$LOG_CHECK_PLAYER_PRE . '逻辑处理失败：line=' . $e->getLine() . ',message=' . $e->getMessage() . '[ ' . $e->getFile() . '：' . $e->getLine() . ' ]', 'error', true);
            $err_msg = '请求异常,请稍后重试！';
            return $this->fetchErr('check_player', $common_data, $err_msg);
        }

        return $this->fetch('check_player', array_merge($common_data, ['error_msg' => $err_msg], [
            'page_status' => $page_status,//页面状态
            'unlock_data' => $page_status === 3 ? $unlock_data : $calculate_data,//已解锁的数据 或者 计算的数据
            'recode' => $this->getRecodeInfoInCheckPlayer($recodeDetail, $seifRid),//顶部档案信息
            'data_recode_change' => $data_recode_change,//购买时的档案信息
            'calculate_probability' => $calculate_probability,//计算的顶部 可能性
            'data_unlock_all' => $data_unlock_all,//底部打包解锁全部的数据
            'is_show_dot' => $is_show_dot,
            'alert' => $alert,//alert对话框
            'error_msg' => $err_msg,
            'share_data' => [
                'is_show' => $share_data['is_show'],
                'data' => json_encode($share_data['data'], true)
            ],//分享的数据，只有已解锁的有
        ]));
    }


    /**
     * 根据数量生成star列表（整颗星）
     * @param int $star
     * @return array
     */
    private function getStarFromInt(int $star = 0): array
    {
        $star_list = [];
        for ($i = 0; $i < $star; $i++)
        {
            $star_list[] = 1;
        }
        return $star_list;
    }


    /**
     * 根据数量生成star列表（包含半颗星）
     * @param int $star 最大10
     * @param bool $is_seleted 是否是选中的星
     * @return array
     */
    private function getStarFromHalf(int $star = 0, bool $is_seleted = true): array
    {
        $star_list = [];

        $star_num_full = floor($star / 2);//选中星数量

        $is_last_half = $star % 2;//是否包含半颗星

        for ($i = 0; $i < $star_num_full; $i++)
        {
            $star_list[] = 1;
        }

        //半颗星
        if ($is_seleted && $is_last_half)
        {
            $star_list[] = 2;
        }


//        Log::write(($is_seleted ? '选中' : '未选中') . '-星的数量' . json_encode($star_list, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE), 'log', true);

        return $star_list;
    }

    /**
     * 异常，传递到页面的数据
     * @param string $template
     * @param $common_data
     * @param $err_msg
     * @return mixed
     */
    private function fetchErr(string $template, $common_data, $err_msg)
    {
        return $this->fetch($template, array_merge($common_data, ['error_msg' => $err_msg, 'sensor_data' => []]));
    }

    /**
     * 获取活动价格或者现价
     * @param array $goodData 商品活动数据
     * @param int $index 在$this->gids里第几个（从0开始）
     * @return mixed
     */
    private function getPriceNowOrActive(array $goodData, int $index)
    {
        if (isset($goodData[$this->gids[$index]]['active']))
        {//存在活动，那么返回活动价格
            return $goodData[$this->gids[$index]]['active']['price'];
        }

        return $goodData[$this->gids[$index]]['now_prize'];
    }

    /**
     * 获取最适合你的Ta顶部档案信息
     * @param array $recode
     * @param int $seifRid
     * @return array
     */
    private function getRecodeInfo(array $recode, int $seifRid = 0): array
    {
        //oss资源地址
        //日月升
        $utilModel = new Util();
        $asc = '日' . $utilModel->recodeAstroMiddlehand($recode['sun']) . ' 月' . $utilModel->recodeAstroMiddlehand($recode['moon']) . ' 升' . $utilModel->recodeAstroMiddlehand($recode['asc']);

        $avatar = $recode['avatar'];
        if ($avatar === "")
        {//为空，那么使用默认
            $avatar = $this->oss . '/avatar_default_2.png';
        } else if (strpos($avatar, 'https://') === false)
        {//不包含 https:// ，那么增加上
            $avatar = $this->oss . $avatar;
        }
        return [
            'avatar' => $avatar,
            'name' => $seifRid === (int)$recode['id'] ? '自己' : $recode['name'],
            'asc' => $asc,
        ];
    }


    /**
     * 获取怎么追求Ta顶部档案信息
     * @param array $recode 可以为空
     * @param int $seifRid
     * @param int $rid_index
     * @param bool $is_share 是否是获取分享的档案数据
     * @return array
     */
    private function getRecodeInfoInFollow(array $recode, int $seifRid = 0, int $rid_index = 1, bool $is_share = false): array
    {
        if (empty($recode) || !isset($recode['id']))
        {//为空的话，返回默认值
            if ($is_share)
            {
                return [
                    'avatar' => '',
                    'name' => '',
                    'asc' => '',
                ];
            }

            return [
                'id' => 0,
                'avatar' => '',
                'name' => '',
                'asc' => '',
                'link' => 'change_single_recode?rid_index=' . $rid_index . '&current_rid=0&need_auth=2'
            ];

        }
        //不为空，那么处理
        //日月升
        $utilModel = new Util();
        $asc = '日' . $utilModel->recodeAstroShorthand($recode['sun']) . '月' . $utilModel->recodeAstroShorthand($recode['moon']) . '升' . $utilModel->recodeAstroShorthand($recode['asc']);

        $avatar = $recode['avatar'];
        if ($avatar === "")
        {//为空，那么使用默认
            $avatar = $this->oss . '/avatar_default_2.png';
        } else if (strpos($avatar, 'https://') === false)
        {//不包含 https:// ，那么增加上
            $avatar = $this->oss . $avatar;
        }

        if ($is_share)
        {
            return [
                'avatar' => $avatar,
                'name' => $seifRid === (int)$recode['id'] ? '自己' : $recode['name'],
                'asc' => $asc,
            ];
        }

        return [
            'id' => $recode['id'],
            'avatar' => $avatar,
            'name' => $seifRid === (int)$recode['id'] ? '自己' : $recode['name'],
            'asc' => $asc,
            'link' => 'change_single_recode?rid_index=' . $rid_index . '&current_rid=' . $recode['id'] . '&need_auth=2'
        ];

    }

    /**
     * 获取“鉴渣”顶部档案信息
     * @param array $recode 可以为空
     * @param int $seifRid
     * @param bool $is_share 是否是分享的数据
     * @return array
     */
    private function getRecodeInfoInCheckPlayer(array $recode, int $seifRid = 0, bool $is_share = false): array
    {
        if (empty($recode) || !isset($recode['id']))
        {//为空的话，返回默认值
            if ($is_share)
            {
                return [
                    'avatar' => '',
                    'name' => '',
                ];
            }

            return [
                'id' => '',
                'avatar' => '',
                'name' => '',
                'link' => 'change_single_recode?current_rid=0&need_auth=2'
            ];
        }

//不为空，那么处理
        $avatar = $recode['avatar'];
        if ($avatar === "")
        {//为空，那么使用默认
            $avatar = $this->oss . '/avatar_default_2.png';
        } else if (strpos($avatar, 'https://') === false)
        {//不包含 https:// ，那么增加上
            $avatar = $this->oss . $avatar;
        }

        if ($is_share)
        {
            return [
                'avatar' => $avatar,
                'name' => $seifRid === (int)$recode['id'] ? '自己' : $recode['name'],
            ];
        }

        return [
            'id' => $recode['id'],
            'avatar' => $avatar,
            'name' => $seifRid === (int)$recode['id'] ? '自己' : $recode['name'],
            'link' => 'change_single_recode?current_rid=' . $recode['id'] . '&need_auth=2'
        ];

    }

    /**
     * 获取竞争对手数 分为三个级别：【
     * 0.5-1=几乎没有
     * 1.5-2=零零星星
     * 2.5-3=屈指可数
     * 3.5-4=有点多
     * 4.5-5=去排队
     * 】
     * @param $difficulty
     * @return string
     */
    private function getFollowRival($difficulty): string
    {
        $difficulty = ceil($difficulty);
        switch ($difficulty)
        {
            case 1:
                return '几乎没有';
            case 2:
                return '零零星星';
            case 3:
                return '屈指可数';
            case 4:
                return '有点多';
            case 5:
                return '去排队';
            default:
                return '屈指可数 ';
        }
    }

    /**
     * 获取竞争对手数 分为三个级别：【追求难度星级 1 => 轻而易举拿下Ta 2 => 你追Ta隔层纱 3 => 追求Ta需要一点勇气哦 4= > 有难度但不是没希望 5 => 搞定Ta比登天还难】
     * @param $difficulty
     * @return string
     */
    private function getFollowDifficulty($difficulty): string
    {
        $difficulty = ceil($difficulty);
        switch ($difficulty)
        {
            case 0:
                return '不怎么需要追就能在一起';
            case 1:
                return '轻而易举拿下Ta';
            case 2:
                return '你追Ta隔层纱';
            case 3:
                return '追求Ta需要一点勇气哦';
            case 4:
                return '有难度但不是没希望';
            case 5:
                return '搞定Ta比登天还难';
            default:
                return '追求Ta需要一点勇气哦 ';
        }
    }


    /**
     * 档案的头像处理
     * @param $recode_info
     */
    private function customAvatar(&$recode_info): void
    {
        if (isset($recode_info['avatar']) && strpos($recode_info['avatar'], 'https://') === false)
        {
            $recode_info['avatar'] = $this->oss . $recode_info['avatar'];
        }

    }


    /**
     * 转换【鉴渣】已解锁的数据
     * @param array $reportData
     * @param int $seifRid
     * @return array
     * @throws \Exception
     */
    private function customCheckPlayerData(array $reportData, int $seifRid): array
    {

        $page_status = -1;//0：未选择档案；1：已选择档案，未计算；2：已选择档案，已计算；3：已解锁
        $data_recode_change = [];
        $unlock_data = [];
        $calculate_probability = 0;
        $err_msg = '';

        //计算状态 1待计算 2计算成功 3计算失败 4已退款
        if ($reportData)
        {
            //status只处理 计算成功的情况，其他情况不会进来
            //数据如下：
//                    {
//                        "id":4,
//    "gid":90,
//    "type":2,
//    "rid1":4923176,
//    "rid2":0,
//    "order_num":"19202208041556593979",
//    "content":{
//                        "probability":25,
//        "code":[
//                            "10000101",
//                            "100105",
//                            "100211",
//                            "10031100",
//                            "10031101",
//                            "10040200",
//                            "10040201",
//                            "100512"
//                        ]
//    },
//    "status":2,
//    "recode_info":{
//                        "recode1":{
//                            "id":4923176,
//            "name":"Mark",
//            "type":2,
//            "year":1996,
//            "month":1,
//            "day":1,
//            "hour":0,
//            "minute":0,
//            "timezone":8,
//            "birth_country":"\u5317\u4eac\u5e02",
//            "birth_province":"\u5317\u4eac\u5e02",
//            "birth_city":"\u4e1c\u57ce\u533a",
//            "live_country":"\u5317\u4eac\u5e02",
//            "live_province":"\u5317\u4eac\u5e02",
//            "live_city":"\u4e1c\u57ce\u533a",
//            "comments":"\u81ea\u5df1",
//            "isself":1,
//            "long_deg":116,
//            "long_min":25,
//            "ew":1,
//            "lat_deg":39,
//            "lat_min":55,
//            "ns":1,
//            "avatar":"uploads\/avatar\/20220311\/50a5dbe19231bb14dac469546675193c.png",
//            "is_summer":0,
//            "uid":12345883,
//            "sun":"\u6469\u7faf",
//            "moon":"\u91d1\u725b",
//            "asc":"\u5929\u79e4"
//        },
//        "recode2":null
//    },
//    "start_time":1659599823,
//    "recode_is_change":false,
//    "new_is_unlock":true
//}
            $page_status = 3;//0：未选择档案；1：已选择档案，未计算；2：已选择档案，已计算；3：已解锁
            if (isset($reportData['content']['probability'], $reportData['content']['code'], $reportData['recode_is_change'], $reportData['recode_info']['recode1']))
            {
                //购买档案数据处理
                $recode_info = (new Util)->getFortuneDetailRecodeInfo([$reportData['recode_info']['recode1']], $seifRid)[0];
                $this->customAvatar($recode_info);
                $data_recode_change = [//购买时的档案信息
                    'is_show' => 1,//是否展示【0：不展示；1：展示】
                    'is_expand' => $reportData['recode_is_change'] ? 1 : 0,//是否展开（当is_show=1时有效）
                    'info' => $recode_info,//修改档案以后，之前的档案信息
                ];

                //词条数据处理
                //鉴渣：code取前4位，
                //依据：1000、1001、1002；
                //表现：1003、1004；
                //态度：1005；

                //数据转换
                $textList = (new ZlPlayboyReportText())->batchGetInfoByIds($reportData['content']['code']);

                $index_according = 0;//依据-自增
                $index_ch_according = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一"];

                $is_according_ok = false;//“依据”区域词条校验
                $is_performance_ok = false;//【“不靠谱”的表现形式】区域词条校验
                $is_manner_ok = false;//【对异性的态度】区域词条校验

                $performance_content_list = [];//“不靠谱”的表现形式，文字列表
                $manner_data = [];//【对异性的态度】区域
                foreach ($textList as $k => $v)
                {
                    //鉴渣词条规则：code取前4位，依据：1000、1001、1002；表现：1003、1004；态度：1005；
                    $key = (int)substr($k, 0, 4);
                    if (in_array($key, [1000, 1001, 1002]))
                    {
                        $is_according_ok = true;
                        $unlock_data[] = [
                            'icon' => $this->oss . '/web/check_player/catalog/according.png',
                            'title' => '依据' . $index_ch_according[$index_according],//最多11个
                            'content' => ($this->is_open_check_player_report_words_log ? $k : '') . $v['text'],
                            'star' => $this->getStarFromInt($v['level']),
                            'status' => 2,//0：不展示详细内容；1：隐藏展示；2：已解锁；3：文字列表；4：标签列表；
                        ];
                        $index_according++;
                    } else if (in_array($key, [1003, 1004]))
                    {
                        $is_performance_ok = true;
                        $performance_content_list[] = ($this->is_open_check_player_report_words_log ? $k : '') . $v['text'];
                    } else if ($key === 1005)
                    {
                        $is_manner_ok = true;
                        $manner_data = ($this->is_open_check_player_report_words_log ? $k : '') . $v['text'];
                    } else
                    {//词条异常，打印日志
                        Log::write(self::$LOG_FLLOW_PRE . '已解锁的词条转换数据异常：此词条不在转换逻辑里，词条内容[' . json_encode($v, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . ']', 'error', true);
                    }

                }

                if ($performance_content_list)
                {
                    $unlock_data[] = [
                        'icon' => $this->oss . '/web/check_player/catalog/performance.png',
                        'title' => '“不靠谱”的表现形式',
                        'content' => '',
                        'content_list' => $performance_content_list,
                        'status' => 3,
                    ];
                }

                if ($manner_data)
                {
                    $unlock_data[] = [
                        'icon' => $this->oss . '/web/check_player/catalog/manner.png',
                        'title' => '对异性的态度',
                        'content' => '',
                        'content_list' => explode('、', $manner_data),
                        'selected_index' => 0,
                        'status' => 4,
                    ];
                }

                if (!$is_according_ok || !$is_performance_ok || !$is_manner_ok)
                {//词条校验结果，有为空的时候，打印日志，方便逻辑修改
                    $msg = '';
                    if (!$is_according_ok)
                    {
                        $msg .= '-【依据】区域词条缺失[1000、1001、1002]';
                    }
                    if (!$is_performance_ok)
                    {
                        $msg .= '-【“不靠谱”的表现形式】区域词条缺失[1003、1004]';
                    }

                    if (!$is_manner_ok)
                    {
                        $msg .= '-【对异性的态度】区域词条缺失[1005]';
                    }
                    Log::write(self::$LOG_CHECK_PLAYER_PRE . '区域词条缺失：' . $msg, 'error', true);
                }

                //赋值，计算的可能性数据
                $calculate_probability = $reportData['content']['probability'];

            } else
            {
                $err_msg = '订单解锁数据异常，请稍后重试';
            }

        } else
        {
            $err_msg = '订单解锁数据异常，请稍后重试！';
        }

        return [
            'page_status' => $page_status,
            'data_recode_change' => $data_recode_change,
            'unlock_data' => $unlock_data,
            'calculate_probability' => $calculate_probability,
            'err_msg' => $err_msg,
        ];
    }


    /**
     * 转换【怎么追求Ta】已解锁的数据
     * @param array $reportData
     * @param int $seifRid
     * @return array
     * @throws \Exception
     */
    private function customFollowData(array $reportData, int $seifRid): array
    {

        $page_status = -1;//0：未选择档案；1：已选择档案，未计算；2：已选择档案，已计算；3：已解锁
        $data_recode_change = [];
        $unlock_data = [];
        $calculate_star_data = [];
        $err_msg = '';

        //计算状态 1待计算 2计算成功 3计算失败 4已退款
        if ($reportData)
        {
            //status只处理 计算成功的情况，其他情况不会进来
            //数据如下：
//            {
//                "id":10,
//    "gid":89,
//    "type":1,
//    "rid1":4923176,
//    "rid2":4922163,
//    "order_num":"18202208050936597006",
//    "content":{
//                "code":[
//                    "10000008",
//                    "10000110",
//                    "1001000600",
//                    "1001000601",
//                    "1001010900",
//                    "1001010901",
//                    "1002000801",
//                    "1002010801",
//                    "1002020601",
//                    "1002030901",
//                    "10030008",
//                    "10030108",
//                    "10030202",
//                    "10030303",
//                    "10030411",
//                    "10030503"
//                ],
//        "difficulty":4,
//        "rival":2,
//        "best":[
//                    "2022-12",
//                    "2023-01",
//                    "2023-03",
//                    "2023-04",
//                    "2023-07"
//                ]
//    },
//    "status":2,
//    "recode_info":{
//                "recode1":{
//                    "id":4923176,
//            "name":"Mark",
//            "type":2,
//            "year":1996,
//            "month":1,
//            "day":1,
//            "hour":0,
//            "minute":0,
//            "timezone":8,
//            "birth_country":"\u5317\u4eac\u5e02",
//            "birth_province":"\u5317\u4eac\u5e02",
//            "birth_city":"\u4e1c\u57ce\u533a",
//            "live_country":"\u5317\u4eac\u5e02",
//            "live_province":"\u5317\u4eac\u5e02",
//            "live_city":"\u4e1c\u57ce\u533a",
//            "comments":"\u81ea\u5df1",
//            "isself":1,
//            "long_deg":116,
//            "long_min":25,
//            "ew":1,
//            "lat_deg":39,
//            "lat_min":55,
//            "ns":1,
//            "avatar":"uploads\/avatar\/20220311\/50a5dbe19231bb14dac469546675193c.png",
//            "is_summer":0,
//            "uid":12345883,
//            "sun":"\u6469\u7faf",
//            "moon":"\u91d1\u725b",
//            "asc":"\u5929\u79e4"
//        },
//        "recode2":{
//                    "id":"4922163",
//            "name":"AAaa",
//            "type":"1",
//            "year":"1997",
//            "month":"1",
//            "day":"1",
//            "hour":"0",
//            "minute":"0",
//            "timezone":"8",
//            "birth_country":"\u5317\u4eac\u5e02",
//            "birth_province":"\u5317\u4eac\u5e02",
//            "birth_city":"\u4e1c\u57ce\u533a",
//            "live_country":"\u5317\u4eac\u5e02",
//            "live_province":"\u5317\u4eac\u5e02",
//            "live_city":"\u4e1c\u57ce\u533a",
//            "comments":"\u6848\u4f8b",
//            "isself":"0",
//            "long_deg":"116",
//            "long_min":"25",
//            "ew":"1",
//            "lat_deg":"39",
//            "lat_min":"55",
//            "ns":"1",
//            "avatar":"",
//            "is_summer":"0",
//            "uid":"12345883",
//            "sun":"\u6469\u7faf",
//            "moon":"\u5904\u5973",
//            "asc":"\u5929\u79e4"
//        }
//    },
//    "start_time":1659663423,
//    "recode_is_change":false,
//    "new_is_unlock":true
//}
            $page_status = 3;//0：未选择档案；1：已选择档案，未计算；2：已选择档案，已计算；3：已解锁
            if (isset($reportData['content']['difficulty'], $reportData['content']['rival'], $reportData['content']['best'], $reportData['content']['code'], $reportData['recode_is_change'], $reportData['recode_info']['recode1'], $reportData['recode_info']['recode2']))
            {
                //购买档案数据处理
                $recodes = (new Util)->getFortuneDetailRecodeInfo([$reportData['recode_info']['recode1'], $reportData['recode_info']['recode2']], $seifRid);
                $this->customAvatar($recodes[0]);
                $this->customAvatar($recodes[1]);
                $data_recode_change = [//购买时的档案信息
                    'is_show' => 1,//是否展示【0：不展示；1：展示】
                    'is_expand' => $reportData['recode_is_change'] ? 1 : 0,//是否展开（当is_show=1时有效）
                    'records' => $recodes,//修改档案以后，之前的档案信息
                ];

                //词条数据处理

                //数据转换
                $textList = (new ZlWoohimReportText())->batchGetInfoByIds($reportData['content']['code']);

                $is_like_type_ok = false;//【Ta可能喜欢的类型】区域词条校验
                $is_advantage_ok = false;//【我有哪些优势】区域词条校验
                $is_weakness_ok = false;//【Ta有哪些雷区和禁忌】区域词条校验
                $is_todo_how_fit_like_ok = false;//【应该怎么做？-怎么做是Ta喜欢的方式？】区域词条校验
                $is_todo_how_safe_ok = false;//【应该怎么做？-怎么做满足Ta的安全感】区域词条校验
                $is_todo_interaction_ok = false;//【应该怎么做？-两个人适合的相处模式】区域词条校验

                $like_type_content_list = [];//【Ta可能喜欢的类型】内容
                $advantage_content_list = [];//【我有哪些优势】内容
                $weakness_content_list = [];//【Ta有哪些雷区和禁忌】内容
                $todo_content_list = [];//【应该怎么做？】内容
                $todo_interaction_content_list = [];//【应该怎么做？-两个人适合的相处模式】内容

                foreach ($textList as $k => $v)
                {
                    //怎么追求Ta：code取前4位
                    //Ta可能喜欢的类型：1000；
                    //哪些优势：1001；
                    //雷区和禁忌：1002；
                    //应该怎么做？
                    //  怎么做是Ta喜欢的方式：100300；
                    //  怎么做满足Ta的安全感:100301；
                    //  两个人适合的相处模式:100302、100303、100304、100305、100306
                    $key = (int)substr($k, 0, 4);
                    $key_six = (int)substr($k, 0, 6);
                    if ($key === 1000)
                    {//Ta可能喜欢的类型
                        $is_like_type_ok = true;
//                        $text = str_replace('[', '[<br>', $v);
//                        $text = ($this->is_open_follow_report_words_log ? $k : '') . str_replace(['[', ']'], ['<span>', '</span>'], $text);
//                        $like_type_content_list[] = $text;

                        $text_black = substr($v, 0, strpos($v, '['));
                        $text_red = substr($v, strpos($v, '[') + 1, strpos($v, ']') - strpos($v, '[') - 1);

                        $like_type_content_list[] = [
                            [
                                'des_type' => 0,//0：黑色；1：红色；
                                'des' => $text_black
                            ],
                            [
                                'des_type' => 1,//0：黑色；1：红色；
                                'des' => $text_red
                            ],
                        ];

                    } else if ($key === 1001)
                    {//我有哪些优势
                        $is_advantage_ok = true;
                        $advantage_content_list[] = ($this->is_open_follow_report_words_log ? $k : '') . $v;
                    } else if ($key === 1002)
                    {//Ta有哪些雷区和禁忌
                        $is_weakness_ok = true;
                        $weakness_content_list[] = ($this->is_open_follow_report_words_log ? $k : '') . str_replace(['[', ']'], ['<span>', '</span>'], $v);
                    } else if (in_array($key_six, [100300, 100301, 100302, 100303, 100304, 100305, 100306]))
                    {//应该怎么做？
                        //应该怎么做？
                        //怎么做是Ta喜欢的方式：100300；
                        //怎么做满足Ta的安全感:100301；
                        //两个人适合的相处模式:100302、100303、100304、100305、100306
                        if ($key_six === 100300)
                        {
                            $is_todo_how_fit_like_ok = true;
                            $todo_content_list[] = [
                                'des_type' => 0,//描述背景颜色【0:白色背景；1：粉红色背景；2：des_list是文字列表】
                                'title' => '怎么做是Ta喜欢的方式？',
                                'des' => ($this->is_open_follow_report_words_log ? $k : '') . $v,
                            ];
                        } else if ($key_six === 100301)
                        {
                            $is_todo_how_safe_ok = true;
                            $todo_content_list[] = [
                                'des_type' => 0,
                                'title' => '怎么做满足Ta的安全感',
                                'des' => ($this->is_open_follow_report_words_log ? $k : '') . $v,
                            ];
                        } else
                        {//两个人适合的相处模式
                            $is_todo_interaction_ok = true;
                            $todo_interaction_content_list[] = ($this->is_open_follow_report_words_log ? $k : '') . $v;
                        }

                    } else
                    {//词条异常，打印日志
                        Log::write(self::$LOG_FLLOW_PRE . '已解锁的词条转换数据异常：此词条不在转换逻辑里，词条内容[' . json_encode($v, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . ']', 'error', true);
                    }

                }


                if ($like_type_content_list)
                {
                    $unlock_data[] = [
                        'icon' => $this->oss . '/web/follow/catalog/like_type.png',
                        'title' => 'Ta可能喜欢的类型',
                        'content_list' => $like_type_content_list,
                        'status' => 5,//0：不展示详细内容；1：隐藏展示；2：已解锁；3：文字列表；（我有哪些优势）4：标签列表；（不实现）5：分段展示（Ta可能喜欢的类型）；6：分段展示文字列表样式（Ta有哪些雷区和禁忌)；7：分段展示文字列表，并且标题与描述分开（应该怎么做？）
                    ];
                }

                if ($advantage_content_list)
                {
                    $unlock_data[] = [
                        'icon' => $this->oss . '/web/follow/catalog/advantage.png',
                        'title' => '我有哪些优势',
                        'content_list' => $advantage_content_list,
                        'status' => 3,
                    ];
                }

                if ($weakness_content_list)
                {
                    $unlock_data[] = [
                        'icon' => $this->oss . '/web/follow/catalog/weakness.png',
                        'title' => 'Ta有哪些雷区和禁忌',
                        'content_list' => $weakness_content_list,
                        'status' => 6,
                    ];
                }

                //需要单独处理【应该怎么做？-两个人适合的相处模式】内容
                if ($todo_interaction_content_list)
                {
                    $todo_content_list[] = [
                        'des_type' => 2,//描述背景颜色【0:白色背景；1：粉红色背景；2：des_list是文字列表】
                        'title' => '两个人适合的相处模式',
                        'des_list' => $todo_interaction_content_list,
                    ];
                }


                //词条接入注意事项：
                //怎么追求TA-应该怎么做？-最佳追求时间（除了时间其他是固定的）：
                //（2022年9月、10月、2023年1月）是追求Ta的最佳时间段，也非常有利于你们的关系进展。
                //这段时间内Ta对爱情将会更加渴望，内心深处对于情感的强烈需要也让Ta更容易被感动。因此，在追求Ta的过程中可以尝试贴合Ta的情感需求，这样才能提高追到Ta的概率哦。

                //怎么追求TA-应该怎么做？-最佳追求时间（为空的时候需要默认文案）：
                //未来一年时间你们的关系进展可能会比较缓慢，Ta的心思并没有放在你们的关系上，或者你对Ta的吸引力还不够强烈，没有达到Ta对另一半的期待。如果Ta是你认定的那个人，还得多多努力呀！

                //test
//                $reportData['best'] =
//                    [
//                        "2022-12",
//                        "2023-01",
//                        "2023-03",
//                        "2023-04",
//                        "2023-07"
//                    ];
                if (isset($reportData['content']['best']))
                {//有数据
                    // "best":[
                    //            "2022-12",
                    //            "2023-01",
                    //            "2023-03",
                    //            "2023-04",
                    //            "2023-07"
                    //        ]

                    $date_str = '';//转换后的数据
                    $year_arr = [];//年份数据
                    foreach ($reportData['content']['best'] as $v)
                    {
                        $time_arr = explode('-', $v);
                        $year = $time_arr[0];
                        $month = (int)$time_arr[1];

                        if (in_array($year, $year_arr, false))
                        {//已经在年份数组里了，那么只拼接月份
                            $date_str .= '、' . $month . '月';
                        } else
                        {//不在已知的年份数组里，那么新增
                            $year_arr[] = $year;
                            $date_str .= '、' . $year . '年' . $month . '月';
                        }
                    }

                    if ($date_str)
                    {
                        $date_str = mb_substr($date_str, 1);
                    } else
                    {
                        Log::write(self::$LOG_FLLOW_PRE . '【应该怎么做？-最佳追求时间（未来一年）】时间转换失败！', 'error', true);
                    }

//                    $des = '<span>（' . $date_str . '）是追求Ta的最佳时间段，也非常有利于你们的关系进展。</span>
//这段时间内Ta对爱情将会更加渴望，内心深处对于情感的强烈需要也让Ta更容易被感动。因此，在追求Ta的过程中可以尝试贴合Ta的情感需求，这样才能提高追到Ta的概率哦。';
                    $des_list[] = [
                        'des_type' => 1,//0：黑色文字；1：红色文字；
                        'des' => '（' . $date_str . '）是追求Ta的最佳时间段，也非常有利于你们的关系进展。'
                    ];
                    $des_list[] = [
                        'des_type' => 0,//0：黑色文字；1：红色文字；
                        'des' => '这段时间内Ta对爱情将会更加渴望，内心深处对于情感的强烈需求，也会让Ta更容易被感动。因此，在追求Ta的过程中可以尝试贴合Ta的情感需求，这样才能提高追到Ta的概率哦。'
                    ];
                } else
                {
                    $des_list[] = [
                        'des_type' => 0,//0：黑色文字；1：红色文字；
                        'des' => '未来一年时间你们的关系进展可能会比较缓慢，Ta的心思并没有放在你们的关系上，或者你对Ta的吸引力还不够强烈，没有达到Ta对另一半的期待。如果Ta是你认定的那个人，还得多多努力呀！'
                    ];
                }
                $todo_content_list[] = [
                    'des_type' => 1,//描述背景颜色【0:白色背景；1：粉红色背景；2：des_list是文字列表】
                    'title' => '最佳追求时间（未来一年）',
                    'des_list' => $des_list,
                ];

                //应该怎么做？-组合所有数据
                if ($todo_content_list)
                {
                    $unlock_data[] = [
                        'icon' => $this->oss . '/web/follow/catalog/todo.png',
                        'title' => '应该怎么做？',
                        'content_list' => $todo_content_list,
                        'status' => 7,
                    ];
                }

                //计算的，星级数据
                $calculate_star_data = [
                    'star_selected_list' => $this->getStarFromHalf($reportData['content']['difficulty'] * 2),
                    'star_normal_list' => $this->getStarFromHalf(10 - $reportData['content']['difficulty'] * 2, false),
                    'tag' => $this->getFollowRival($reportData['content']['difficulty']),
                    'res' => $this->getFollowDifficulty($reportData['content']['difficulty']),
                ];

                if (!$is_like_type_ok || !$is_advantage_ok || !$is_weakness_ok || !$is_todo_how_fit_like_ok || !$is_todo_how_safe_ok || !$is_todo_interaction_ok)
                {//词条校验结果，有为空的时候，打印日志，方便逻辑修改
                    $msg = '';
                    if (!$is_like_type_ok)
                    {
                        $msg .= ' - 【Ta可能喜欢的类型】区域词条缺失[1000]';
                    }

                    if (!$is_advantage_ok)
                    {
                        $msg .= ' - 【我有哪些优势】区域词条缺失[1001]';
                    }

                    if (!$is_weakness_ok)
                    {
                        $msg .= ' - 【Ta有哪些雷区和禁忌】区域词条缺失[1002]';
                    }
                    if (!$is_todo_how_fit_like_ok)
                    {
                        $msg .= ' - 【应该怎么做？-怎么做是Ta喜欢的方式？】区域词条缺失[100300]';
                    }

                    if (!$is_todo_how_safe_ok)
                    {
                        $msg .= ' - 【应该怎么做？-怎么做满足Ta的安全感】区域词条缺失[100301]';
                    }

                    if (!$is_todo_interaction_ok)
                    {
                        $msg .= ' - 【应该怎么做？-两个人适合的相处模式】区域词条缺失[100302、100303、100304、100305、100306]';
                    }


                    Log::write(self::$LOG_FLLOW_PRE . '区域词条缺失：' . $msg, 'error', true);
                }


            } else
            {
                $err_msg = '订单解锁数据异常，请稍后重试';
            }

        } else
        {
            $err_msg = '订单解锁数据异常，请稍后重试！';
        }

        return [
            'page_status' => $page_status,
            'data_recode_change' => $data_recode_change,
            'unlock_data' => $unlock_data,
            'calculate_star_data' => $calculate_star_data,
            'err_msg' => $err_msg,
        ];
    }


}
